package com.uade.tp.negocio;
import java.util.Date;
import java.util.Vector;

import com.uade.tp.negocio.view.ComidaPedidoView;
import com.uade.tp.persistencia.AdministradorPersistenciaPedido;

public class Pedido {
//	private int id;
	private int nro;
	private Date fecha;
	private String cliente;
	private float precio = 0;
	
	//Tiene que tener las ComidaPedidoSD
	private Vector<ComidaPedido> comidas;

	public Pedido(int nro) {
		this.nro = nro;
		this.precio = 0;
		comidas = new Vector<ComidaPedido>();
	}
	
	public Pedido(int nro,Date fecha,String cliente,float precio,Vector <ComidaPedidoView> comidaspedidoSD) {
		this.nro = nro;
		this.fecha = fecha;
		this.cliente = cliente;
		this.precio=precio;
		
		//inicializo las comidas
		comidas = new Vector<ComidaPedido>();
		
		int id=AdministradorPersistenciaPedido.getInstancia().insert(this);
		guardarComidas(comidaspedidoSD,id);
		
	}
	
	private void guardarComidas(Vector <ComidaPedidoView> comidaspedidoSD,int idpedido)
	{
		for (int i = 0; i < comidaspedidoSD.capacity(); i++) 
		{
			ComidaPedidoView elemento=comidaspedidoSD.elementAt(i);
			Comida comida=Comida.buscarComida(elemento.getComida().getNombre());
			ComidaPedido comidapedido = new ComidaPedido(comida,elemento.getCantidad(),idpedido);
			
			//agrego la comida a la lista
			comidas.add(comidapedido);
			
		}
		
	}
	
	public Vector<ComidaPedido>getComidasPedidos(){
		return comidas;		
	}
		

	
//	public int getID() {
//		return id;
//	}
	
	public int getNro() {
		return nro;
	}
	public Date getFecha() {
		return fecha;
	}
	
	public java.sql.Date getFechaDB() {
		return new java.sql.Date(fecha.getTime());
	}
	public String getCliente() {
		return cliente;
	}
	public float getPrecio() {
		return precio;
	}
	
	public void setNro(int nro) {
		this.nro=nro;
		AdministradorPersistenciaPedido.getInstancia().update(this);	
	}
	
	public void setFecha(Date fecha) {
		this.fecha= fecha;
		AdministradorPersistenciaPedido.getInstancia().update(this);
	}
	public void setCliente(String cliente) {
		this.cliente=cliente;
		AdministradorPersistenciaPedido.getInstancia().update(this);
	}
	public void setPrecio(float precio) {
		this.precio=precio;
		AdministradorPersistenciaPedido.getInstancia().update(this);
	}
	
	public static int obtenerNroPedido()
	{
		return AdministradorPersistenciaPedido.getInstancia().obtenerNroPedido();
	}

	public ComidaPedido agregarComida(Comida comida,int cantidad) throws Exception {

		ComidaPedido cp = new ComidaPedido(comida,cantidad,this.nro);
		cp.prepararComida();
		this.comidas.add(cp);
		this.precio += cp.getTotal();
		
		return cp;
		
	}
	
	public void eliminarComida(String nombreComida) {
		ComidaPedido cp = buscarComida(nombreComida);
		cp.eliminarComida();
		comidas.remove(cp);
		this.precio -= cp.getTotal();
		
	}

	private ComidaPedido buscarComida(String nombre) {
		
		ComidaPedido cp = null;
		
		for( int x = 0 ; x < comidas.size() ; x++) {
			if(comidas.get(x).getComida().getNombre().equals(nombre)) {
				cp = comidas.get(x);
			}
		}
		
		return cp;
	}

	public void confirmar(int nro, Date fecha, String cliente) {
		this.nro   = nro;
		this.fecha = fecha;
		this.cliente = cliente;
		
		AdministradorPersistenciaPedido.getInstancia().insert(this);
		
	}
	
}
